impl Solution {
    pub fn partition(head: Option<Box<ListNode>>, x: i32) -> Option<Box<ListNode>> {
        let mut header=Box::new(ListNode::new(0));
        header.next=head;
        let mut smaller_vec=Vec::<Option<Box<ListNode>>>::new();
        let mut p=&mut header;
        while !p.next.is_none() {
            let v=p.next.as_ref().unwrap().val;
            if v<x{
                let mut node=p.next.take();
                let next_node=node.as_mut().unwrap().next.take();
                p.next=next_node;
                smaller_vec.push(node);
            }
            if p.next.is_none(){
                break;
            }
            p=p.next.as_mut().unwrap();
        };
        println!("{:?}",smaller_vec);
        smaller_vec.sort_by_key(|a|a.as_ref().unwrap().val);
        // smaller_vec.sort_by(|a,b|{
        //     a.as_ref().unwrap().val.cmp(&b.as_ref().unwrap().val)
        // });
        println!("{:?}",smaller_vec);
        let mut h=&mut header.next.take();
        for i in (0..smaller_vec.len()).rev(){
            smaller_vec[i].as_mut().unwrap().next=h.take();
            h=&mut smaller_vec[i];
        };
        h.take()
    }
}
